{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  Storm Benchmarks 100000\n",
    "Initial Statistics\n",
    "------\n",
    "\n",
    "storm-benchmarks   storm-benchmarks-20-1444757790  nobody  ACTIVE  3h 40m 51s      (workers)20      (executors)85      (tasks)85\n",
    "This test was performed with the storm AdvertisingTopology reading from 5 kafka instances. The kafka instances were collectively fed 50000 json-serialized events per second.\n",
    "\n",
    "### Counts\n",
    "Counts were calculated by the topology in 100-second windows, and updated counts were written to the redis database once per second.\n",
    "\n",
    "In the blue graph, you can see that the expected normal distribution of counts appears.\n",
    "\n",
    "The green graph shows the amount of time in ms it took for a window to get its final update after the window officially ended. That is, once events stop being emitted for a window, this is how long it took for the final counts to be written. As expected, because of the 1s publishing period, the graph has a sharp dropoff at 1000ms. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "slideshow": {
     "slide_type": "-"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "slideshow": {
     "slide_type": "-"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.mlab as mlab\n",
    "from scipy.stats import norm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "window_size_ms = 10000   #100 seconds (for me). Adjust to match your benchmark and common component.\n",
    "\n",
    "update_times = np.loadtxt(\"./first_run/BEAM_SPARK/50000/updated.txt\", dtype=int)\n",
    "filtered_times = [x - window_size_ms for x in update_times if x >= window_size_ms]\n",
    "plt.figure(num=None, figsize=(15, 10))\n",
    "plt.hist(filtered_times, 100, density=0, facecolor='green', alpha=0.75)\n",
    "plt.xlabel('Last update time (in ms after window ended)')\n",
    "plt.ylabel('Window Count')\n",
    "plt.title('Histogram of Last Window Update Times (Estimated end-to-end latency)')\n",
    "0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Percentiles\n",
    "\n",
    "Percentiles for the last-update time. 90th percentile being within 1000ms or so indicates that the topology is keeping up with the throughput."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1235. 1248. 1256. 1266. 3247. 3274.]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0th percentile: 1235\n",
      "25th percentile: 1248\n",
      "50th percentile: 1256\n",
      "75th percentile: 1266\n",
      "90th percentile: 3247\n",
      "100th percentile: 3274\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Percentile values\n",
    "p = np.array([0.0, 25.0, 50.0, 75.0, 90.0, 100.0])\n",
    "sorted_times = np.sort(filtered_times)\n",
    "perc = np.percentile(sorted_times, p)\n",
    "print(perc)\n",
    "\n",
    "plt.figure(num=None, figsize=(15, 10))\n",
    "\n",
    "plt.plot(sorted_times)\n",
    "# Place red dots on the percentiles\n",
    "plt.plot((len(sorted_times)-1) * p/100., perc, 'ro')\n",
    "#plt.xscale('symlog')\n",
    "# Set tick locations and labels\n",
    "plt.xticks((len(sorted_times)-1) * p/100., map(str, p))\n",
    "\n",
    "plt.show()\n",
    "for x in range(len(p)):\n",
    "    print(\"%dth percentile: %d\"%(p[x],perc[x]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### *Late* Publishes\n",
    "Here are the percentiles for the windows that were published *after* the expected 1000ms cutoff:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Percentile values\n",
    "q = [1.0, 10.0, 25.0, 50.0, 75.0, 90.0, 99.0, 100]\n",
    "p = np.array([1.0, 10.0, 25.0, 50.0, 75.0, 90.0, 99.0, 100])\n",
    "filtered_sorted_times = [x for x in sorted_times if x > 1000]\n",
    "perc = np.percentile(filtered_sorted_times, q)\n",
    "print(perc)\n",
    "\n",
    "plt.figure(num=None, figsize=(15, 10))\n",
    "\n",
    "plt.plot(filtered_sorted_times)\n",
    "# Place red dots on the percentiles\n",
    "plt.plot((len(filtered_sorted_times)-1) * p/100., perc, 'ro')\n",
    "plt.xscale('symlog')\n",
    "# Set tick locations and labels\n",
    "plt.xticks((len(filtered_sorted_times)-1) * p/100., map(str, p))\n",
    "\n",
    "plt.show()\n",
    "for x in range(len(p)):\n",
    "    print(\"%dth percentile: %d\"%(p[x],perc[x]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Adjust this based on outliers you see. Start with 0 to find them.\n",
    "filter_counts_below = 1500\n",
    "\n",
    "seen_counts = np.loadtxt(\"seen.txt\", dtype=int)\n",
    "filtered_counts = [x for x in seen_counts if x >= filter_counts_below] \n",
    "\n",
    "plt.figure(num=None, figsize=(15, 10))\n",
    "n, bins, patches = plt.hist(filtered_counts, 100, density=1, facecolor='blue', alpha=0.75)\n",
    "(mu, sigma) = norm.fit(filtered_counts)\n",
    "y = norm.pdf( bins, mu, sigma)\n",
    "l = plt.plot(bins, y, 'r--', linewidth=1)\n",
    "plt.xlabel('Total ad count in window')\n",
    "plt.ylabel('Normalized Window Count')\n",
    "plt.title('Histogram of Total Counts per Window')\n",
    "plt.show()\n",
    "0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "slideshow": {
     "slide_type": "-"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done\n"
     ]
    }
   ],
   "source": [
    "print(\"done\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
